#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define MAXN 100005

int T,n,m,L,V,dis,ans1,ans2,ctim;

bool flag;

int p[MAXN];

struct checkr{
    int x;
    vector<int> v;
    bool operator <(checkr &t){
        return v.size() > t.v.size();
    }
}ck[MAXN];

unordered_set<int> vis;

struct cars{
    int d,v,a;
}car[MAXN];

struct interval{
    int x,l,r;
}ter[MAXN];

void init(){
    scanf("%d%d%d%d",&n,&m,&L,&V);
    for(int i = 1;i <= n;i++){
        scanf("%d%d%d",&car[i].d,&car[i].v,&car[i].a);
        ter[i].x = i;
    }
    for(int i = 1;i <= m;i++){
        scanf("%d",&p[i]);
    }
}

void check(int x){
    int i = 1;
    int sum = 0;
    int ans = 0;
    vis.clear();
    //printf("%d ",x);
    while(x > 0){
        //printf("%d",x & 1);
        if(x & 1){
            for(int j = 0;j < ck[i].v.size();j++){
                if(!vis.count(ck[i].v[j])){
                    sum++;
                    vis.insert(ck[i].v[j]);
                }
            }
            ans++;
        }
        x >>= 1;
        i++;
    }
    //printf("\n");
    if(sum == ans1){
        //printf("%d\n",ans);
        ans2 = min(ans2,ans);
    }

}

int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&T);
    while(T--){
        //ctim++;
        //input
        init();
        //get overspeed interval
        for(int i = 1;i <= n;i++){
            auto cres = car[i];
            auto tres = ter[i];
            //printf("%d %d\n",i,cres.a);
            if(cres.a == 0){
                //printf("%d %d %d\n",i,cres.v,V);
                if(cres.v > V){
                    tres.l = cres.d;
                    tres.r = L;
                }
                else{
                    tres.l = L+1;
                    tres.r = L+1;
                }
            }
            else if(cres.a > 0){
                if(cres.v > V){
                    tres.l = cres.d;
                    tres.r = L;
                }
                else{
                    dis = (V*V - cres.v*cres.v) / (2 * cres.a);
                    if(cres.d + dis + 1 > L){
                        tres.l = L+1;
                        tres.r = L+1;
                    }
                    else{
                        tres.l = cres.d + dis + 1;
                        tres.r = L;
                    }
                }
            }
            else if(cres.a < 0){
                if(cres.v <= V){
                    tres.l = L+1;
                    tres.r = L+1;
                }
                else{
                    tres.l = cres.d;
                    dis = (V*V - cres.v*cres.v) / (2 * cres.a);
                    if((cres.v*cres.v - V*V) % (-2 * cres.a) == 0){
                        tres.r = cres.d + dis - 1;
                    }
                    else{
                        tres.r = cres.d + dis;
                    }
                }
            }
            ter[i] = tres;
        }
        /*
        for(int i = 1;i <= n;i++){
            printf("%d %d %d\n",ter[i].x,ter[i].l,ter[i].r);
        }
        */
        if(ctim > 10){
            break;
        }
        //get ans1
        ans1 = 0;
        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= m;j++){
                if(ter[i].l <= p[j] && p[j] <= ter[i].r){
                    ans1++;
                    break;
                }
            }
        }
        printf("%d ",ans1);
        //get ans2
        ans2 = m;
        for(int i = 1;i <= m;i++){
            ck[i].v.clear();
        }
        vis.clear();
        for(int i = 1;i <= m;i++){
            ck[i].x = p[i];
            for(int j = 1;j <= n;j++){
                if(ter[j].l <= p[i] && p[i] <= ter[j].r){
                    ck[i].v.push_back(j);
                }
            }
        }
        for(int i = 0;i < (1 << m);i++){
            check(i);
        }

        printf("%d\n",m - ans2);

    }


	return 0;
}
/*
get overspeed interval






x = (vt^2 - v0^2) / (2 * a)

1 none     -> [16,16]
2 [12,15]  -> [12,15]
3 (2,15]   -> [3,15]
4 [5,9)    -> [5,8]
5 [6,6+7/8)-> [6,6]

  2     5     8 9          15
1 2 3 4 5 6 7 8 9101112131415
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

  2     5     8 9          15
0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

2
5 1 2
8 1 2
9 1
15 1 4

a 1 2 3
b 1 4   -
c 2 3   -
d 2 3 4
e 5     -
f 2 4 5

a 1 2 3
f 2 4 5
d 2 3 4 -
b 1 4   -
c 2 3   -
e 5     -



*/
